package com.imax.center.task;

import com.imax.center.common.Result;
import com.imax.center.common.ResultCode;
import com.imax.center.model.EzvizChannel;
import com.imax.center.model.EzvizDevice;
import com.imax.center.service.DeviceService;
import com.imax.center.service.H3yunService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Objects;

/**
 * 设备同步任务
 * 定时从萤石云平台同步设备信息到氚云平台
 */
@Slf4j
@Component
public class DeviceSyncTask {

    @Autowired
    private DeviceService deviceService;

    @Autowired
    private H3yunService h3yunService;

    /**
     * 每天凌晨2点执行设备同步
     */
    @Scheduled(cron = "0 0 2 * * ?")
    public void syncDeviceInfo() {
        log.info("开始执行设备信息同步任务");
        try {
            // 从萤石云平台获取设备列表
            List<EzvizDevice> deviceList = deviceService.getAllDeviceList();
            log.info("从萤石云平台获取到{}个设备", deviceList.size());
            
            if (deviceList.isEmpty()) {
                log.warn("萤石云平台未获取到设备信息，同步任务结束");
                return;
            }
            
            // 批量保存设备信息到氚云平台
            Result<?> result = h3yunService.batchSaveDeviceInfo(deviceList);
            if (Objects.equals(result.getCode(), ResultCode.SUCCESS.getCode())) {
                log.info("设备信息同步成功: {}", result.getMsg());
            } else {
                log.error("设备信息同步失败: {}", result.getMsg());
            }
        } catch (Exception e) {
            log.error("设备信息同步任务异常: ", e);
        }
        log.info("设备信息同步任务结束");
    }

    /**
     * 每天凌晨2点执行通道同步
     */
    @Scheduled(cron = "0 0 2 * * ?")
    public void syncChannelInfo() {
        log.info("开始执行通道信息同步任务");
        try {
            // 从萤石云平台获取通道列表
            List<EzvizChannel> deviceList = deviceService.getAllChannelList();
            log.info("从萤石云平台获取到{}个通道", deviceList.size());

            if (deviceList.isEmpty()) {
                log.warn("萤石云平台未获取到通道信息，同步任务结束");
                return;
            }

            // 批量保存通道信息到氚云平台
            Result<?> result = h3yunService.batchSaveChannelInfo(deviceList);
            if (Objects.equals(result.getCode(), ResultCode.SUCCESS.getCode())) {
                log.info("通道信息同步成功: {}", result.getMsg());
            } else {
                log.error("通道信息同步失败: {}", result.getMsg());
            }
        } catch (Exception e) {
            log.error("通道信息同步任务异常: ", e);
        }
        log.info("通道信息同步任务结束");
    }
    
}